import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        //实验方法
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        Integer tmp = list.remove(0);//!!使用remove作用相当于取出该值，再删除
        System.out.println(tmp);
    }
    public static void main4(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        //迭代器的使用

        //迭代器，使用需要导包,是用来遍历集合的
        //Iterator<待使用的内部类型> 变量名 = 外部类型实例对象.iterator();
        /**while(it.hasNext()) {
         * System.out.print(it.next()+" ");
           }*/
        Iterator<Integer> it = list.iterator();
        while(it.hasNext()) {
            System.out.print(it.next()+ " ");
        }
    }
    public static void main3(String[] args) {
        //构造方法三：将一组数据作为参数构造
        ArrayList<Integer> tmp = new ArrayList<>();
        tmp.add(1);
        tmp.add(2);
        tmp.add(3);

        ArrayList<Number> list2 = new ArrayList<>(tmp);
        list2.add(7);
        list2.add(8);
        list2.add(9);
        System.out.println(list2);
        /**
         * Collection<? extends E> c
         * 外层类型（结构类型）需要实现Collection接口，如tmp本质是ArrayList类型，而ArrayList的父类实现了Collection接口
         * ？是通配符，表示tmp的内部类型（数组元素的类型）必须是list2内部类型的子类或本身，此处tmp是Integer，list2是Number
         * c是形参变量名，无实际意义*/
    }
    public static void main2(String[] args) {
        //构造方法二：指定内存大小
        ArrayList<Integer> list1 = new ArrayList<>();
        /**
         * 当指定开辟空间大于零的数组时，开辟指定空间数组
         * 当指定开辟空间等于零的数组时，按照无参构造方法实现
         * 当指定开辟空间小于零的数组时，抛出异常*/
    }
    public static void main1(String[] args) {
        //构造方法一：无参构造方法
        //当调用无参构造时，返回的是空数组，并未开辟空间
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list);//输出1，2，3--》既然是未开辟空间，那么什么可以对其添加元素呢？
        //使用无参构造方法实例化对象，当第一次调用Add方法时，会对其分配十个元素空间
        //当可用空间满了后，1.5倍扩容

    }
}
